注意! 注意 ! Attention 注意力機制


在今天的文章中,自然語言處理又更邁進一步拉。今天要介紹的兩大重點,一個是在神經機器翻譯 (Neural Machine Translation) 表現得很好的模型 - Sequence to Sequence ,另一個則是讓這個模型進步許多,後來也在其他模型上取得成功的機制 - 注意力機制 (Attention)

Seq2Seq


2014 年,第一篇 Seq2Seq 論文被發表。
2016 年, Google 翻譯將原本使用的 Statistical Machine Translation 系統,換成以機器學習為基底的 Neural Machine Translation 系統。

Seq2Seq 模型的問世,讓神經機器翻譯無疑是自然語言處理演進史上的一大成功。現在,讓我們來深入看看 Seq2Seq 是怎麼進行翻譯的。


圖片出處:李宏毅教授 sequence-to-sequence learning 課程

Seq2Seq 基本上可以分成兩大部分: EncoderDecode 。 Encoder 在做的事情有點像是降低維度,把原本一個句子的資訊壓縮成一個向量,Decoder 則是利用這個向量來預測下一個詞,產生新的文字內容。值得一提的是,這兩者是直接組裝起來訓練,輸入給定句子輸出翻譯,我們並不會看到中間產物的向量。

像這樣根據給定的條件生成內容的行為,就稱為 Conditional Generation 。而 Seq2Seq 這個模型,也是一種 Conditional Language Model , Language Model 指的是 Seq2Seq 預測並生成文字, Conditional 則代表他是根據給定的句子來生成翻譯文字的。

再來說說 Encoder 跟 Decoder ,其實他們的結構都是前面提到的 RNN, Encoder RNN 吃進輸入的句子後,會產生一串 Cell States 和 Hidden States ,我們取最後一個步驟的輸出來當作壓縮後的向量(以 LSTM 為例,可能是取 Cell State 或是 Hidden State ),並假設這個向量含有整個句子的資訊。

在深入講解 Decoder 之前,來看看 RNN 模型是如何生成文字的。通常我們會給模型一個特殊的符號 <BOS> (Begin of the Sentence) 當做第一個詞,模型吃進這第一個詞後,會輸出各個詞彙的機率分佈 y1 ,我們從這個機率分佈隨機取樣或是取最高機率,來當作輸出的詞,也是模型下一個輸入的詞。除了 <BOS> 外還有一個特殊的詞 <EOS> (End of the Sentence) ,當模型預測出這個詞的時候,句子的生成便結束。


圖片出處:李宏毅教授 sequence-to-sequence learning 課程

Decoder RNN 的輸入除了這一個個預測出的詞以外,也包括 Encoder RNN 得出的向量, Decoder RNN 就由這兩者組合而成的輸入 ,得到下一個詞的機率分佈,藉此生成其後的一整個句子。

Attention


Seq2Seq 看似強大,也取得了不錯的成果,但不知道大家有沒有覺得他的架構可能有一些問題?在我們取最後一個狀態的輸出當作 Encode 的向量時,假設這個向量可以包含整個句子的資訊,但之前提過, RNN 可能會忘記太遠的資訊,即使 LSTM / GRU 等模型改善了這個問題,仍然無法完全解決。

於是,這最後的輸出就成了資訊的瓶頸,我們無法保證他到底包含了多少輸入句子的資訊。這時候,有人提出了一個機制試圖解決這個問題,這個機制就是我們接下來要介紹的 - 注意力機制 (Attention) 。

注意力機制的核心概念是,在 Decoder 的每一個步驟,都直接與 Encoder 相連,透過權重加權 Encoder 輸出的序列當作 Decoder 的輸入。如此一來, Decoder 的每個步驟,都好像是專注在輸入的句子權重高的部分,於是對於每個翻譯出的詞,我們可以知道他是專注在輸入的哪些詞而得出的結果。

那要如何得到這些權重呢?一個很機器學習風格的答案 - 機器自己學的。

看看下面的圖,在計算 Decoder 第一步驟輸入的時候我們會有一組模型的參數 z0 ,z0 與每個 Hidden State 進行 Match 的運算,這個運算是可以自己定義的,可以是 z, h 兩者的相似度,或是直接丟進一個小 NN 得出分數,最後得到的結果就是 Attention Score α1(0)

圖片出處:李宏毅教授 sequence-to-sequence learning 課程

讓 z0 對每個 Hidden State h 進行運算,我們可以得到和 Hidden States 數量一樣多的 α ,取 Softmax 轉換成機率,就得到了 Attention Distribution。將這些機率乘以 Hidden States ,有如取 Hidden States 的加權,加權後相加就得到了 Decoder 的輸入 - c0 。


圖片出處:李宏毅教授 sequence-to-sequence learning 課程

重複這個步驟,利用模型的參數 z0, z1, z2, ... 求出 Attention Scores, Attention Distribution ,計算 Decoder 輸入與輸出,直到模型輸出 <EOS> 就得到了我們要的結果。

小結


以上介紹完了在 Seq2Seq 模型上的注意力機制,其實注意力機制在其他深度學習的模型、或是其他的任務,都可以派上用場!

More general definition of attention:
Given a set of vector values, and a vector query, attention is a technique to compute a weighted sum of the values, dependent on the query. - Abigail See, Matthew Lamm, Stanford NLP with DL

筆者的英文能力實在很難把它翻得通順,不過注意力機制可以看作是對於一堆 Values (像是每個 Decoder Hidden State),我們試圖利用權重來選出這些值的重點,而 Query (像是所有的 Encoder Hidden States) 可以來幫助我們來決定要專注於哪些值。

在明天的文章,我們會介紹注意力機制催生的強大模型 - Transformer,我們明天見!

#Nature Language Processing #NLP #machine learning #ML #Deep Learning #DL #Attention #Seq2Seq #Sequence-to-Sequence







你可能感興趣的文章

Day 80

Day 80

What Type of Laser Engraving Machine Should be Used for Stainless Steel Engraving?

What Type of Laser Engraving Machine Should be Used for Stainless Steel Engraving?

[ CSS 03 ]  盒模型(box model)與定位(position)

[ CSS 03 ] 盒模型(box model)與定位(position)






留言討論